﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;

namespace WindowsFormsApplication2
{
    class WebConfigParser
    {

        string databaseName = null;
        List<string> connectionStringList = new List<string>();

        /// <summary>
        /// Zczytuje i podmienia dane w web.configu.
        /// </summary>
        /// <param name="filePath">Plik.</param>
        /// <param name="dev">Autentykacja developerska,</param>
        public void ReadFromFile(string filePath, bool dev)
        {
            System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(@filePath);
            XmlDocument doc = new XmlDocument();
            doc.Load(@filePath);
            try
            {
                XmlNode connectionStringNode = doc.DocumentElement["connectionStrings"];
                string connectionStringsSectionText = this.GetXmlConnectionString(GetListOfStringsFromFile("connectionstrings.txt"), dev);
                if (connectionStringsSectionText != null)
                {
                    connectionStringNode.InnerXml = connectionStringsSectionText;
                    doc.SelectSingleNode("configuration/system.web/sessionState/@sqlConnectionString").Value = databaseName;
                    doc.Save(@filePath);
                }
            }
            catch
            {
                throw new ArgumentException("Brak sekcji connectionstrings");
                //throw new ExceptionH("sekcja");
            }
        }

        /// <summary>
        /// Zwraca listę listę stringów z pliku.
        /// </summary>
        /// <param name="file">Plik.</param>
        /// <returns>Lista stringów.</returns>
        public List<string> GetListOfStringsFromFile(string file)
        {
            List<string> stringList = new List<string>();
            try
            {
                using (StreamReader sr = new StreamReader(file))
                {
                    String line;
                    while ((line = sr.ReadLine()) != null)
                    {
                        stringList.Add(line);
                    }
                }
            }
            catch (Exception e)
            {
                throw new ArgumentException("Brak pliku");
             //   throw new ExceptionH("plik");
            }
            return stringList;
        }

        /// <summary>
        /// Zwraca nazwę bazy danych która ma być podmieniona w connection stringu.
        /// </summary>
        /// <param name="databaseName">Nazwa bazy danych.</param>
        public void GetDatabaseName(string databaseName)
        {
            this.databaseName = databaseName;
        }
        
        /// <summary>
        /// Zwraca całą sekcję connectionStrings.
        /// </summary>
        /// <param name="connectionStringList">Lista itemów z których składa się sekcja connection string.</param>
        /// <param name="developerAuthentication">Czy autentykacja jest developerska</param>
        /// <returns>Sekcja connection string do podmiany</returns>
        string GetXmlConnectionString(List<string> connectionStringList, bool developerAuthentication)
        {
            string xmlConnectionString = null;
            if (developerAuthentication == true)
            {
                xmlConnectionString = connectionStringList[0] + databaseName + connectionStringList[1] + databaseName + connectionStringList[2];
            }
            else
            {
                throw new ArgumentException("Nie zaimplementowano");
               // throw new ExceptionH("implementacja");
            }
            return xmlConnectionString;
        }
    }
}
